SageMakerでエンドポイントを消し忘れて200ドル超えのコストが発生した話
はじめに
みなさんこんにちは、大阪オフィスのよなです。 最近は花粉が多くて目がしばしばする日が続きますね。
先日、そんな花粉より怖いものが目に飛び込んできました。 いつものようにAWSのマネジメントコンソール開いた際にコストを確認したところ...
300ドル!? つい先日まで数十ドルだったので、数日で200ドル以上のコストが発生していました。
原因は先日検証を行なっていたSageMakerのエンドポイントを消し忘れていたことでした。 こんな悲しいことが起こらないように、なぜこの問題が発生したのか、どうすれば防げたのか振り返っていきたいと思います。
いきなりまとめ
それでは先にまとめから
[原因]
- モデルのデプロイを行った後、ドメインは削除したがエンドポイントの削除ができていなかった
- ドメインを削除するとエンドポイントも削除されていると勘違いしていた
[対処]
- SageMakerのコンソール画面よりエンドポイントを削除
私が勘違いしていたこと
SageMakerではドメインを作成して、その中のユーザープロファイルからStudioを起動します。 Studioでは、JupyterLabやCode Editorなどのアプリケーションや、モデルやトレーニングジョブ、推論エンドポイントなどのリソースを操作することができます。
私はSageMakerを以下のような入れ子構造をイメージをしていました。
そのため、ドメインを削除するとドメインに紐づくStudioで作成したジョブやエンドポイントも一緒に削除されると考えていました。
私のイメージ
しかし、実際にはドメインに紐づくのはStudio内のアプリケーションのみで、ジョブやエンドポイントは削除されずに残ります。
実際の動き
ジョブやエンドポイントのリソースはStudioから作成することができますが、直接ドメインに紐づいている訳ではないということです。 それに気付かないと今回のような消し忘れが発生します。
それでは次に、実際にどのような操作を行った場合に、どこでリソースを削除する必要があるのか?画面を見ながら確認していきます。
操作の再現
エンドポイント作成まで
まずはエンドポイントを作るまでの流れを見ていきます。 最初にドメインを作成します。
ドメインを作成すると、ドメインとユーザープロファイルが作成されます。 次にデフォルトのユーザープロファイルからStudioを起動します。
Studioが起動しました。
今回はJumpStartを使ってトレーニングジョブとエンドポイントを作成します。 モデルは適当なものを選択します。
今回は動作の確認だけなので、値は全てデフォルトにしてインスタンスサイズだけml.m5.xlargeとしています。 トレーニングジョブに適当な名前を付けて実行します。
ジョブが完了したら、次にエンドポイントのデプロイを行います。 エンドポイントのデプロイも、インスタンスサイズのみml.m5.largeに変更して実行します。
数分後エンドポイントのデプロイが完了します。 ここまで全てStudio内で操作をしています。
次に、Studioが紐づけられたドメインを削除してみます。
私の勘違いはここで全てのリソースが削除されると思っていたことです。
エンドポイント削除
ドメインが削除されましたが、この状態で放置するとエンドポイントのコストが発生します。 まずは先ほど作成したエンドポイントが残っていることを確認します。 SageMakerのコンソール画面より、 推論→エンドポイントの順でエンドポイントの一覧を確認します。
エンドポイントが残っていますね このエンドポイントは不要なので削除しましょう。 これで余計なコストが発生するのを防げます。
また、今回の一連の流れで作成されたモデルとエンドポイントの設定についても削除しておきます。 まずはモデルから 推論→モデルの順に進み、先ほど作成したモデルを削除します。
次に、エンドポイントの設定を削除します。 推論→エンドポイントの順に進み、エンドポイントに使用された設定を削除します。
今回の流れで作成されたトレーニングジョブについては削除することができません。
これでコストが発生しないクリーンな状態になりました。
コスト感
今回私はml.p3.2xlargeのエンドポイントを2日ほど起動していました。 執筆時点ではml.p3.2xlargeは東京リージョンで5.242USD/1hです。
機械学習に使われるインスタンスはスペックの高いものが多いです。 数日放置するだけで数百ドルが溶けてしまうようなインスタンスも少なくないので、エンドポイントやノートブックインスタンスの削除忘れには気をつけましょう。
まとめ
Studioからエンドポイントの作成ができるため、ドメインを削除することでStudioごとエンドポイントが削除されると勘違いしていました。 Studioは手段であり、Studioを使って作成したリソースが全てStudioに紐づいている訳ではない。ということが理解できました。
また、本筋とは少しずれますが、こういったコストの異常を検知するためにも、コストアラートや日時の通知なども設定すると良いでしょう。